package com.str.controller;

import com.alibaba.fastjson.JSONObject;
import com.str.annotation.PrintLog;
import com.str.dto.*;
import com.str.service.SystemUserService;
import com.str.utils.CommonUtil;
import com.str.utils.Retcode;
import com.str.vo.ResponseVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

/**
 * 系统用户信息表(SystemUser)表控制层
 *
 * @author makejava
 * @since 2023-04-09 17:59:35
 */
@RestController
@RequestMapping("systemUser")
@Log4j2
@Api(value = "系统用户信息API", tags = "系统用户信息API")
public class SystemUserController {
    /**
     * 服务对象
     */
    @Resource
    private SystemUserService systemUserService;

    /*=====================系统api=====================*/

    /**
     * 获取登录加密key
     *
     * @return
     */
    @ApiOperation("获取登录加密key")
    @PostMapping("/getKey")
    public String getKey(@RequestBody JSONObject requestJson) {
        return systemUserService.getKey(requestJson);
    }

    /**
     * 登录提交
     *
     * @return
     */
    @ApiOperation("登录提交")
    @PostMapping("/submit")
    @PrintLog(desc = "登录提交")
    public String submit(@RequestBody @Valid LoginSubmitDto loginSubmitDto) {
        //提交验证
        return systemUserService.loginSubmit(loginSubmitDto);
    }

    /**
     * 短信验证码登录获取验证码
     *
     * @return
     */
    @ApiOperation("获取验证码")
    @PostMapping("/getLoginCode")
    @PrintLog(desc = "获取验证码")
    public ResponseVO getLoginCode(@RequestBody JSONObject requestJson) {
        return systemUserService.getLoginCode(requestJson);
    }

    /**
     * 退出登录
     *
     * @return
     */
    @ApiOperation("退出登录")
    @PostMapping("/logOutSystem")
    @PrintLog(desc = "退出登录")
    public ResponseVO logOutSystem(HttpServletRequest request) {
        return systemUserService.logOutSystem(request);
    }
    /*=====================用户列表业务api========================*/

    /**
     * 分页获取用户列表信息
     *
     * @return
     */
    @ApiOperation("分页获取用户列表信息")
    @PostMapping("/getSystemUserList")
    @PrintLog(desc = "分页获取用户列表信息")
    public ResponseVO getSystemUserList(@RequestBody @Valid GetSystemUserListDto dto, HttpServletRequest request) {
        return systemUserService.getSystemUserList(dto, request);
    }

    /**
     * 获取用户个人信息/查看详情
     *
     * @return
     */
    @ApiOperation("获取用户个人信息")
    @PostMapping("/getSystemUser")
    @PrintLog(desc = "获取用户个人信息")
    public ResponseVO getSystemUser(@RequestBody JSONObject requestJson, HttpServletRequest request) {
        return systemUserService.getSystemUser(requestJson, request);
    }

    /**
     * 添加用户(注意只有系统管理人员可以添加用户)
     *
     * @return
     */
    @ApiOperation("添加用户")
    @PostMapping("/addSystemUser")
    @PrintLog(desc = "添加用户")
    public ResponseVO addSystemUser(@RequestBody @Valid AddSystemUserDto addSystemUserDto, HttpServletRequest request) {
        return systemUserService.addSystemUser(addSystemUserDto, request);
    }

    /**
     * 删除用户(注意只有系统管理人员可以删除用户)
     *
     * @return
     */
    @ApiOperation("删除用户")
    @PostMapping("/deleteSystemUser")
    @PrintLog(desc = "删除用户")
    public ResponseVO deleteSystemUser(@RequestBody JSONObject requestJson, HttpServletRequest request) {
        return systemUserService.deleteSystemUser(requestJson, request);
    }

    /**
     * 重置密码
     *
     * @return
     */
    @ApiOperation("重置密码")
    @PostMapping("/resetPassword")
    @PrintLog(desc = "重置密码")
    public ResponseVO resetPassword(@RequestBody @Valid ResetPasswordDto dto, HttpServletRequest request) {
        return systemUserService.resetPassword(dto, request);
    }

    /**
     * 解冻/冻结,1:启用，2：冻结
     *
     * @return
     */
    @ApiOperation("启用/冻结")
    @PostMapping("/enableDisable")
    @PrintLog(desc = "启用/冻结")
    public ResponseVO enableDisableSystemUser(@RequestBody @Valid EnableDisableSystemUserDto dto, HttpServletRequest request) {
        return systemUserService.enableDisableSystemUser(dto, request);
    }

    /*=====================用户角色业务api=====================*/

    /**
     * 获取所有的角色信息（仅系统管理员可见）
     *
     * @return
     */
    @ApiOperation("获取所有的角色信息")
    @PostMapping("/getRoleUsers")
    @PrintLog(desc = "获取所有的角色信息")
    public ResponseVO getRoleList(HttpServletRequest request) {
        return systemUserService.getRoleList(request);
    }

    /**
     * 根据角色类型分页查询绑定角色的用户列表（仅系统管理员可见）
     *
     * @return
     */
    @ApiOperation("根据角色类型分页查询绑定角色的用户列表")
    @PostMapping("/getRoleUserList")
    @PrintLog(desc = "根据角色类型分页查询绑定角色的用户列表")
    public ResponseVO getRoleUserList(@RequestBody @Valid GetRoleUserListDto dto, HttpServletRequest request) {
        return systemUserService.getRoleUserList(dto, request);
    }

    /**
     * 删除对应角色的用户（仅系统管理员可操作）
     *
     * @return
     */
    @ApiOperation("删除对应角色的用户")
    @PostMapping("/deleteRoleUser")
    @PrintLog(desc = "删除对应角色的用户")
    public ResponseVO deleteRoleUser(@RequestBody @Valid DeleteRoleUserDto dto, HttpServletRequest request) {
        return systemUserService.deleteRoleUser(dto, request);
    }

    /**
     * 获取所有的非绑定角色用户列表（仅系统管理员可操作）
     *
     * @return
     */
    @ApiOperation("获取所有的非绑定角色用户列表")
    @PostMapping("/getAllGeneralUserList")
    @PrintLog(desc = "获取所有的非绑定角色用户列表")
    public ResponseVO getAllGeneralUserList(@RequestBody @Valid GetAllGeneralUserListDto dto, HttpServletRequest request) {
        return systemUserService.getAllGeneralUserList(dto, request);
    }

    /**
     * 添加对应角色用户信息（仅系统管理员可操作、可支持添加多人）
     *
     * @return
     */
    @ApiOperation("添加对应角色用户信息")
    @PostMapping("/addRoleUserList")
    @PrintLog(desc = "添加对应角色用户信息")
    public ResponseVO addRoleUserList(@RequestBody @Valid AddRoleUserListDto dto, HttpServletRequest request) {
        return systemUserService.addRoleUserList(dto, request);
    }

}

